﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace OneOfAll.Common.Models.ResourceModels
{
    public class ActiveSkillModel : SkillModel
    {
        private int used_Hp = 0;
        public int Used_Hp
        {
            get { return used_Hp; }
            set { used_Hp = value; RaisePropertyChanged(); }
        }

        private int used_Mp = 0;
        public int Used_Mp
        {
            get { return used_Mp; }
            set { used_Mp = value; RaisePropertyChanged(); }
        }

        private int used_Body = 0;
        public int Used_Body
        {
            get { return used_Body; }
            set { used_Body = value; RaisePropertyChanged(); }
        }

        private int used_Consciousness = 0;
        public int Used_Consciousness
        {
            get { return used_Consciousness; }
            set { used_Consciousness = value; RaisePropertyChanged(); }
        }

        private int used_Momentum = 0;
        public int Used_Momentum
        {
            get { return used_Momentum; }
            set { used_Momentum = value; RaisePropertyChanged(); }
        }

        private int create_Body = 0;
        public int Create_Body
        {
            get { return create_Body; }
            set { create_Body = value; RaisePropertyChanged(); }
        }

        private int create_Consciousness = 0;
        public int Create_Consciousness
        {
            get { return create_Consciousness; }
            set { create_Consciousness = value; RaisePropertyChanged(); ; }
        }

        private int create_Momentum = 0;
        public int Create_Momentum
        {
            get { return create_Momentum; }
            set { create_Momentum = value; RaisePropertyChanged(); ; }
        }

        private double addition_Power = 0.0;
        public double Addition_Power
        {
            get { return addition_Power; }
            set { addition_Power = value; RaisePropertyChanged(); }
        }

        private double addition_Strong = 0.0;
        public double Addition_Strong
        {
            get { return addition_Strong; }
            set { addition_Strong = value; RaisePropertyChanged(); }
        }

        private double addition_Trick = 0.0;
        public double Addition_Trick
        {
            get { return addition_Trick; }
            set { addition_Trick = value; RaisePropertyChanged(); }
        }

        private double addition_Wit = 0.0;
        public double Addition_Wit
        {
            get { return addition_Wit; }
            set { addition_Wit = value; RaisePropertyChanged(); }
        }

        private double addition_Accurate = 1.0;
        public double Addition_Accurate
        {
            get { return addition_Accurate; }
            set { addition_Accurate = value; RaisePropertyChanged(); }
        }

        private double addition_CriticalChance = 0.0;
        public double Addition_CriticalChance
        {
            get { return addition_CriticalChance; }
            set { addition_CriticalChance = value; RaisePropertyChanged(); }
        }

        private double addition_CriticalValue = 0.0;
        public double Addition_CriticalValue
        {
            get { return addition_CriticalValue; }
            set { addition_CriticalValue = value; RaisePropertyChanged(); }
        }

        private int effectRange = 0;
        public int EffectRange
        {
            get { return effectRange; }
            set { effectRange = value; RaisePropertyChanged(); }
        }
    }

    public class PassiveSkillModel : SkillModel
    {
        private int addition_Hp = 0;
        public int Addition_Hp
        {
            get { return addition_Hp; }
            set { addition_Hp = value; RaisePropertyChanged(); }
        }

        private int addition_Mp = 0;
        public int Addition_Mp
        {
            get { return addition_Mp; }
            set { addition_Mp = value; RaisePropertyChanged(); }
        }

        private int addition_Power = 0;
        public int Addition_Power
        {
            get { return addition_Power; }
            set { addition_Power = value; RaisePropertyChanged(); }
        }

        private int addition_Strong = 0;
        public int Addition_Strong
        {
            get { return addition_Strong; }
            set { addition_Strong = value; RaisePropertyChanged(); }
        }

        private int addition_Trick = 0;
        public int Addition_Trick
        {
            get { return addition_Trick; }
            set { addition_Trick = value; RaisePropertyChanged(); }
        }

        private int addition_Wit = 0;
        public int Addition_Wit
        {
            get { return addition_Wit; }
            set { addition_Wit = value; RaisePropertyChanged(); }
        }

        private int addition_Attack = 0;
        public int Addition_Attack
        {
            get { return addition_Attack; }
            set { addition_Attack = value; RaisePropertyChanged(); }
        }

        private int addition_Defense = 0;
        public int Addition_Defense
        {
            get { return addition_Defense; }
            set { addition_Defense = value; RaisePropertyChanged(); }
        }

        private int addition_Dodge = 0;
        public int Addition_Dodge
        {
            get { return addition_Dodge; }
            set { addition_Dodge = value; RaisePropertyChanged(); }
        }

        private int addition_Accurate = 0;
        public int Addition_Accurate
        {
            get { return addition_Accurate; }
            set { addition_Accurate = value; RaisePropertyChanged(); }
        }

        private int addition_CriticalChance = 0;
        public int Addition_CriticalChance
        {
            get { return addition_CriticalChance; }
            set { addition_CriticalChance = value; RaisePropertyChanged(); }
        }

        private int addition_CriticalValue = 0;
        public int Addition_CriticalValue
        {
            get { return addition_CriticalValue; }
            set { addition_CriticalValue = value; RaisePropertyChanged(); }
        }

        private int groupUp_Hp = 0;
        public int GroupUp_Hp
        {
            get { return groupUp_Hp; }
            set { groupUp_Hp = value; RaisePropertyChanged(); }
        }

        private int groupUp_Mp = 0;
        public int GroupUp_Mp
        {
            get { return groupUp_Mp; }
            set { groupUp_Mp = value; RaisePropertyChanged(); }
        }

        private int groupUp_Power = 0;
        public int GroupUp_Power
        {
            get { return groupUp_Power; }
            set { groupUp_Power = value; RaisePropertyChanged(); }
        }

        private int groupUp_Strong = 0;
        public int GroupUp_Strong
        {
            get { return groupUp_Strong; }
            set { groupUp_Strong = value; RaisePropertyChanged(); }
        }

        private int groupUp_Trick = 0;
        public int GroupUp_Trick
        {
            get { return groupUp_Trick; }
            set { groupUp_Trick = value; RaisePropertyChanged(); }
        }

        private int groupUp_Wit = 0;
        public int GroupUp_Wit
        {
            get { return groupUp_Wit; }
            set { groupUp_Wit = value; RaisePropertyChanged(); }
        }

        private int groupUp_Attack = 0;
        public int GroupUp_Attack
        {
            get { return groupUp_Attack; }
            set { groupUp_Attack = value; RaisePropertyChanged(); }
        }

        private int groupUp_Defense = 0;
        public int GroupUp_Defense
        {
            get { return groupUp_Defense; }
            set { groupUp_Defense = value; RaisePropertyChanged(); }
        }

        private int groupUp_Dodge = 0;
        public int GroupUp_Dodge
        {
            get { return groupUp_Dodge; }
            set { groupUp_Dodge = value; RaisePropertyChanged(); }
        }

        private int groupUp_Accurate = 0;
        public int GroupUp_Accurate
        {
            get { return groupUp_Accurate; }
            set { groupUp_Accurate = value; RaisePropertyChanged(); }
        }

        private int groupUp_CriticalChance = 0;
        public int GroupUp_CriticalChance
        {
            get { return groupUp_CriticalChance; }
            set { groupUp_CriticalChance = value; RaisePropertyChanged(); }
        }

        private int groupUp_CriticalValue = 0;
        public int GroupUp_CriticalValue
        {
            get { return groupUp_CriticalValue; }
            set { groupUp_CriticalValue = value; RaisePropertyChanged(); }
        }

    }

    public class SkillModel : BaseModel
    {
        private int lv_Request = 1;
        public int Lv_Request
        {
            get { return lv_Request; }
            set { lv_Request = value; RaisePropertyChanged(); }
        }

        private int difficulty = 0;
        public int Difficulty
        {
            get { return difficulty; }
            set { difficulty = value; RaisePropertyChanged(); }
        }

        private int lv = 1;
        public int Lv
        {
            get { return lv; }
            set { lv = value; RaisePropertyChanged(); }
        }

        private int lv_Max = 1;
        public int Lv_Max
        {
            get { return lv_Max; }
            set { lv_Max = value; RaisePropertyChanged(); }
        }

        private int needExp = 1000;
        public int NeedExp
        {
            get { return needExp; }
            set { needExp = value; RaisePropertyChanged(); }
        }

        private int exp = 0;
        public int Exp
        {
            get { return exp; }
            set 
            { 
                exp = value;
                while (Exp >= NeedExp && Lv < Lv_Max)
                {
                    Exp -= NeedExp;
                    Lv++;
                }
                RaisePropertyChanged(); 
            }
        }
    }
}
